واحد پردازش گرافیکی (به انگلیسی: Graphics processing unit) یا به اختصار GPU
نوشته شده توسط : بارکزهی
 

واحد پردازش گرافیکی (به انگلیسی: Graphics processing unit) یا به اختصار GPU

امروزه پردازنده‌‌هاي گرافيكي كه بر روي كارت‌گرافيك‌هاي گران‌قيمت نصب مي‌شوند توان پردازشي خارق‌العاده‌اي را نسبت به پردازنده‌هاي مركزي ارائه مي‌دهند، اين موضوع موجب گسترش كاربرد‌هاي اين پردازنده‌ها در حوزه‌هايي فراتر از بازي‌هاي كامپيوتري گشته است، پردازنده‌هاي گرافيكي مدرن با معماري موازي خود پردازنده‌هاي بسيار سريعي به شمار مي‌روند، در عين حال با قيمت و توان مصرفي كمتري عرضه مي‌شوند و جهت پياده‌سازي الگوريتم‌ها و برنامه هاي بينايي ماشين و پردازش تصوير كه بار پردازشي زيادي را جهت رسيدن به نرخ فريم بيشتر طلب مي‌كنند، يك راه‌كار اقتصادي و كارآمد به شمار مي‌رود، طوري كه برنامه نويس بدون نياز به فراگيري واسط‌هاي برنامه نويسي گرافيكي به كمك كتابخانه‌هاي موجود براي اين‌كار مي‌تواند بار پردازشي برنامه خود را به سادگي از پردازنده مركزي به پردازنده گرافيكي منتقل كند.

مقدمه
اشتياق فراوان طرفداران بازي‌هاي كامپيوتري به بازي‌هاي زيبا و طبيعي‌‌تر، موجب به‌وجود آمدن تحولات متعددي در كارت‌‌گرافيك‌ها و فن‌آوري‌هاي وابسته به آن شده به طوري كه كارت‌گرافيك‌هاي مدرن مي‌توانند به درمان سرطان كمك كنند! زمين لرزه برزگي در شهر سانفرانسيسكو را پيش‌بيني كنند و با فراهم‌ آوردن توان پردازشي خارق‌العاده، مسائل بسيار پيچيده محاسباتي و رياضي را به سادگي حل كنند. آيا تا كنون به اين موضوع فكر كرده‌ايد كه كارت‌گرافيك‌هاي چندصد هزار توماني به غير از بازي‌هاي كامپيوتري در چه كاربرد‌هاي ديگري به درد مي‌خورد؟

سال‌ها است كه افزايش روز افزون عملكرد كارت‌گرافيك‌ها، محققين را به فكر بهره‌گيري از توان پردازشي آنها در كاربردهاي غيرگرافيكي انداخته است. در همين راستا شاخه جديدي در علوم كامپيوتر به نام GPGPU ايجاد گشته كه هدف نهايي فعالان اين عرصه بهره‌گيري از كارت‌گرافيك به عنوان يك كمك پردازنده‌ محاسباتي در برنامه‌هاي غيرگرافيكي و برنامه‌هاي عمومي است.

در همايش SuperComputing 2006 كه در شهر Tampa ايالت فلوريدا برگزار شد، محققين دانشگاه كارولينا نتايج آزمايش‌هاي گسترده خود را در مورد مقايسه عملكرد پردازنده‌گرافيكي(GPU) با پردازنده‌مركزي (CPU) منتشر كردند، پردازنده‌گرافيكي، نوعي پردازنده‌ موازي است كه بر روي كارت گرافيك‌ها قرار دارد (شكل 1). اين پردازنده به صورت كاملا اختصاصي براي پردازش گرافيكي محيط‌هاي سه‌بعدي و بازي‌هاي كامپيوتري طراحي شده است كه طي سال‌هاي گذشته توسط صنعت چند بيليون دلاري بازي‌هاي كامپيوتري آن چنان تحول يافته كه امروزه از نظر كارايي با پردازنده‌مركزي كه يك پردازنده همه منظوره به شمار مي‌رود رقابت مي‌كند. بكار گيري پردازنده‌گرافيكي در محاسبات عمومي جايگاه جديدي براي كارت‌گرافيك‌هاي قدرتمند ايجاد كرده است، جايي كه از پردازنده‌گرافيكي ديگر براي پردازش محاسبات گرافيكي بازي‌هاي‌كامپيوتري استفاده نمي‌شود، در عوض در نقش يك پردازنده كمكي، بخشي يا تمامي بار محاسباتي پردازنده‌مركزي را تقبل كرده و به عمليات پردازش سرعت مي‌بخشد.

 

واحد پردازش گرافیکی (به انگلیسی: Graphics processing unit) یا به اختصار GPU ابزاری اختصاصی برای رندر کردن گرافیکی (به طور طبیعی به نظر رسیدن تصویر) در کامپیوترهای شخصی، ایستگاه‌های کاری، و یا در کنسولهای بازی است. این واحد گاهی اوقات واحد پردازندهٔ بصری یا VPU نیز نامیده می‌شود. ویژگی‌های واحدهای پردازش مرکزی جدید برای پردازش و ارائه دادن کارهای دیداری (گرافیکی)، آن‌ها را بسیار کارآمدتر از واحد‌های پردازندهٔ مرکزی یا CPU در پردازش الگوریتم‌های پیجید کرده است.

یک GPU معمولاً بر روی کارتهای گرافیکی قرارمی گیرد، اگرچه کارتهای گرافیکی غیر حرفه‌ای مستقیما بر روی بُرد مادر (OnBorad) قرار می‌گیرند.

GPU ابزاری است شامل تعدادی عملگر‌ ابتدایی گرافیکی، که باعث می‌شود نسبت به CPU در خلق تصاویر بر صفحه نمایشگر بسیار سریعتر عمل کنند.

رایج ترین عملگر‌ها برای گرافیک دو بعدی کامپیوترها شامل عملگر BitBLT است که معمولاً در سخت افزار‌های مخصوص یک "Biltter" نامیده می‌شود. این عملگر‌ها برای کشیدن مستطیل، مثلث، دایره و قوس بکار می‌روند. پردازنده‌های گرافیکی جدید، پردازش گرافیک سه بعدی را نیز در رایانه‌ها انجام می‌دهند.

شتاب دهنده ی گرافیکی

* یک واحد پردازش گرافیکی، پردازشگری است که به کارت گرافیکی الحاق شده است تا عملیات ممیز شناورو اعمال مشابه با آن را انجام دهد.

* یک شتاب دهنده گرافیکی از اتصال چندین ریزتراشه جاوی عملگرهای ریاضی ویژه ی رندر کردن گرافیکی را مورد استفاده قرار می دهد.

دهه 1970

تراشه هایANTIC و CTIA امکان کنترل سخت افزاری حالات گرافیکی و متنی و سایر تاثیرات را بر روی آتاری 8-بیتی را فراهم می کردند.تراشه ی ANTIC پرداشگری مخصوص برای نگاشت(در جالت برنامه نویسی) متن و داده ی گرافیکی به خروجی تصویری بود. طراح تراشه ANTIC جی مینر، طراحی تراشه ی گرافیکی را برای کمودور آمیگا نیز بر عهده داشت.[۱]

 

 

دهه 1980

کمودور آمیگا اولین وسیلهٔ پرفروش رایانه‌ای بود که شامل یک biltter در قسمت سخت افزار گرافیکی خود بود و نیزIBM ۸۵۱۴ یکی از اولین رایانه های شخصی بود که کارتی گرافیکی از نوع ۲-بعدی را شامل می‌شد.

آمیگا در زمان خودش بی نظیر بود چرا که یکی از خصوصیات آن، که امروزه به نام سیستم شتاب دهندهٔ گرافیکی شناخته می‌شود را دارا بود. تقریباً تمام بار تولید توابع گرافیکی بر عهدهٔ سخت افزار بود، به طور مثال کشیدن خط، پرکردن مساحت اشکال. یک پردازندهٔ کمکی گرافیکی نیز همراه با مجموعهٔ دستورات داخلی مخصوص به خود در این محموعه حاضر بود. تا قبل از ارایه (و حتی تا مدتی بعد بر روی اکثر سیستم‌ها)، این CPU بود که بار تمام جنبه‌های گرافیکی را بر دوش داشت.[۲]

دههٔ ۱۹۹۰

در اوایل دهه ی۹۰ با رشد چشمگیر سیستم عامل مایکروسافت ویندوز، علاقهٔ فراوانی به استفاده از سرعت بیشتر و تفکیک پذیری ۲-بعدی بالاتر (bitmapped graphics) که قبلا توسط ایستگاه‌های کاری یونیکس و رایانه‌های مکینتاش شرکت اپل استفاده شده بود، ایجاد گردید. در بازار فروش، تسلط مایکروسافت به معنی تمرکز و تلاش بیشتر برروی فقط یک فاصل گرافیکی قابل برنامه نویسی بود :دستگاه میانجی گرافیکی (Graphics Device Interface).

در سال ۱۹۹۱، S۳ Graphics؛ S۳ ۸۶C۹۱۱ به عنوان اولین شتاب دهنده تک-چیپ ۲-بعدی معرفی شد.

از سال ۲۰۰۰ تا به حال

با ظهور رابط کابری DirectX نسخهٔ ۸ و توابعی مشابه بانام OpenGL، توانایی برنامه نویسی برای سایه‌زنی، به قابلیت‌های GPU اضافه شد. هر پیکسل اکنون می‌توانست توسط برنامه‌های کوچک که شامل اضافه شدن بافت تصویری به عنوان ورودی‌ها، و یک برنامهٔ کوتاه توانایی پردازش هریک از مختصات سه بعدی را پیش از نمایش تصویر دارا بود .ان ویدیا بازار را با ارایهٔ اولین چیپ که توانایی سایه‌زنی به صورت نرم افزاری را دارا بود، در دست گرفت: جی فورس ۳ (GeForce ۳) که با نام NV۲۰ مشهور شد. در اکتبر ۲۰۰۲، شرکت ATI با معرفی Radoen ۹۷۰۰ ،با نام مستعارR۳۰۰، اولین شتابدهندهٔ دایرکت ۳بعدی نسخهٔ ۹ را معرفی کرد.

توابع مربوط به یک محاسبه

GPUهای جدید از بسیاری از ترانزیستورهایشان برای محاسبهٔ مربوط به گرافیک سه بعدی رایانه‌ها استفاده می‌کنند. آن‌ها در ابتدا برای شتاب دادن به حافظهٔ اصلی، نقشه برداری بافت ها، رندرکردن چند ظلعی های با اضلاع زیاد و به طور کلی چندگوشه‌ها استفاده می‌شدند. ولی بعداً برای کارهای سخت‌تر از جمله شتاب دادن به محاسبات هندسی مانند تبدیل رئوس از یک دستگاه مختصات به یک دستگاه مختصات دیگر استفاده شد. اخیراً با گسترش GPU‌ها , آنها سایه زنی‌های قابل برنامه‌ریزی و رئوس و بافت‌هارا اداره می‌کنند همچنین با بسیاری از عملگر‌های پشتیبانی شده توسط CPU‌ها و الحاقی و محاسبهٔ مقادیر واسط بین دو نقطه، با تکنیک reduce aliasing) و Color Space با دقت بسیار بالا انجام می‌دهد.

 

 

اشنایی با GPGPU وکاربرد ان در پردازش تصویر

NVIDIA و ATI به عنوان به دو توليدكننده بزرگ پردازنده‌هاي‌گرافيكي، از اين ايده‌ي نوين استقبال كرده‌اند و براي گسترش فروش محصولات خود در بازارهايي فراتر از بازار بازي‌هاي كامپيوتري، فن‌آوري‌هاي جديدي براي به كارگيري پردازنده‌گرافيكي در كاربرد‌هاي غيرگرافيكي ارائه كرده‌اند. همزمان با عرضه Geforce 8800 ، شركت Nvidia‌ اولين محيط توسعه برنامه‌هاي GPGPU را مبتني بر كامپايلر C، موسوم به CUDA معرفي كرده كه به كمك اين فن‌آوري بهره‌برداري از پردازنده‌گرافيكي در برنامه‌هاي عمومي بسيار آسان‌تر خواهد شد. به گفته مدير ارشد شركت NVIDIA در حوزه محاسبات پردازنده‌گرافيكي ، آقاي andy keane ، معماري كاملا جديدي در پردازنده‌گرافيكي هاي نسل هشتم شركت به كار گرفته شده كه در آن با اضافه كردن حافظه‌ كاشه، استفاده از پردازنده‌گرافيكي در دو مد گرافيكي و غير گرافيكي به سهولت امكان پذير است: «هم اكنون پردازنده‌گرافيكي شباهت بسياري به پردازنده‌مركزي پيدا كرده است و CUDA مسير انعطاف پذير و ساده‌اي را براي دستيابي به كارايي شگفت‌انگيز نهفته شده در پردازنده‌گرافيكي براي برنامه‌نويسان به ارمغان مي‌آورد».

تجربه‌هاي بسيار موفق به دست آمده در پروژه Folding@Home دانشگاه اِستَنفورد، مهر تاييدي بر كاربردي بودن اين سبك جديد برنامه‌ها است ، در اين پروژه‌ي عمومي كه سال‌هاست آغاز شده كامپيوتر‌هاي هزاران نفر از سراسر دنيا با همديگر از طريق اينترنت متصل مي‌گردد تا به كمك توان پردازشي پردازنده‌مركزي هاي خود، پروتئين‌هاي موثر در ايجاد بيماري‌هاي سرطاني و بيماري‌هاي غددي را شبيه‌سازي كرده و محققين را در يافتن روش‌هاي درمان آنها ياري كنند. چند ماه پيش با همكاري شركت ATI، نسخه آزمايشي از نرم‌افزاري عرضه شد كه در آن از توان پردازش كارت‌‌گرافيك كامپيوترهايي كه از طريق اينترنت به همديگر متصل شده‌اند به جاي استفاده از پردازنده‌مركزي آنها در شبيه‌سازي‌ها استفاده مي‌كند. آخرين نتايج به دست آمده از اين آزمايش جهش 20 الي 40 درصدي نرخ رشد پروژه را نشان مي‌دهد، آرايه‌اي از 536 كارت‌گرافيك با پردازنده‌گرافيكيي Radeon X1900 كه طي چند ماه به اين پروژه پيوسته اند با 35 تريليون محاسبه در ثانيه، سرعت پردازشي بيش از 17485 پردازنده‌مركزي شركت كننده با پلتفورم linux با حداكثر 21 تريليون محاسبه در ثانيه ارائه كرده‌اند. افزايش عملكرد حاصل از بكارگيري پردازنده‌گرافيكي در برنامه‌هاي غيرگرافيكي، محققين و دانشمندان علوم كامپيوتر را مجذوب خود كرده به طوري كه روز به روز بر تعداد مقالات و تحقيقات حوزه GPGPU افزوده مي‌شود، Denish Manocha يكي از اساتيد تيم تحقيقاتي Gamma در دانشگاه كارولينا، در اين مورد مي‌گويد:



«حداكثر توان پردازشي پردازنده‌گرافيكي ها هر ساله 2 برابر رشد مي‌كند، چرا كه صنعت بازي‌هاي كامپيوتري انگيزه اقتصادي اين رشد را فراهم كرده است».



همچنين ايشان به همراه همكار خود در دانشكده علوم كامپيوتر دانشگاه كارولينا، مدت‌هاست اقدام به برگزاري دوره‌هاي آموزشي ويژه محاسبات عمومي به كمك پردازنده‌گرافيكي كرده‌ا‌ند. اين امر نويد آن را مي‌دهد كه بهره‌گيري از پردازنده‌گرافيكي در محاسبات عمومي به يكي از دروس استاندارد محافل آكادميك تبديل شود.



گروهي از محققين بر اين باورند كه قدرت پردازشي بسيار بالاي سوپر‌كامپيوترها با بهره برداري از توان پردازشي پردازنده‌گرافيكيهايي كه براي صنعت بازي‌هاي كامپيوتري توسعه يافته‌اند، قابل دستيابي است. به گفته Vijay Pande مدير پروژه Folding@Home «با بهره‌برداري از توان پردازشي پردازنده‌گرافيكي ها ما شاهد يك انقلاب واقعي بوديم كه هرگز قابل تصور نمي‌بود».



در اين مقاله به كاربرد‌هاي كارت‌گرافيك‌ در برنامه‌هاي عمومي اشاره شده كه در اين كاربرد‌ها پردازنده گرافيكي به عنوان يك كمك پردازنده محاسباتي قدرتمند به خدمت گرفته مي‌شود، علاوه‌ بر اين مقايسه‌اي ميان پردازنده‌ گرافيكي و پردازنده ‌مركزي صورت گرفته تا برتري‌هاي نسبي پردازنده‌هاي گرافيكي مشخص گردد سپس به روش‌هاي متداول برنامه‌نويسي عمومي پردازنده‌گرافيكي اشاره كوتاهي كرده و در انتها برخي از كاربرد‌هاي روش برنامه‌نويسي مذكور در برنامه‌هاي پردازش تصوير و بينايي ماشين بررسي شده است.

 

RE: اشنایی با GPGPU وکاربرد ان در پردازش تصویر

ويژگي‌هاي پردازندههاي‌گرافيكي‌ مدرن


پردازنده‌گرافيكي داراي واحدهاي محاسباتي متعددي است كه حجم بسيار زيادي از داده‌ها در

كوتاه‌ترين زمان به طور موازي پردازش مي‌كند. طي پنج‌سال گذشته استقبال مشتاقان بازي‌هاي

كامپيوتري از كارت‌گرافيك‌هاي مدرن و قدتمند، موجب شده تا پردازنده‌گرافيكي ها به عنوان هسته‌‌ي

اصلي پردازش گرافيكي در كامپيوتر‌ها به سرعت توسعه يابند. چهار نكته اساسي در رابطه با

پردازنده‌گرافيكيهاي مدرن وجود دارد كه قابليت‌هاي آنها را به خوبي ترسيم مي‌كند.



اول، پردازنده‌‌هاي‌گرافيكي به لطف معماري موازي خود، پردازنده‌هاي بسيار سريعي هستند.

دوم، با توجه به ملاك كارايي به قيمت، ارزان هستند.

سوم، با توجه به ملاك كارايي به وات، آنها توان مصرفي بسيار كمتري نسبت به پردازنده‌مركزي ها

دارند. شايد تعجب كرده باشيد و اين سوال در ذهن شما ايجاد شده باشد كه اگر پردازنده‌گرافيكي ها

سريعتر، ارزان‌تر و كم مصرف تر از پردازنده‌مركزيها هستند چرا كامپيوتر به كمك يكي از آنها تمامي

برنامه‌هاي خود را اجرا نمي‌كند!؟



پاسخ اين سوال در چهارمين نكته نهفته است كه محدوديت‌هاي پردازنده‌گرافيكي را به عنوان يك

پردازنده اختصاصي بيان مي‌كند.

پردازنده‌‌های‌گرافيكي تنها قادر به پردازش سريع برنامه‌هايي هستند كه همانند يك بازي‌ كامپيوتري،

محاسبات پيچيده و سنگين همزماني دارند. بنابراين شما نمي‌توانيد برنامه Word مجموعه Office

را به كمك يك پردازنده‌گرافيكي اجرا كرده و از افزايش عملكرد آن لذت ببريد! چرا كه اين گونه برنامه‌ها

بيشتر از سوي دستگاه‌هاي ورودي و خروجي محدود شده‌اند تا از سوي پردازنده، به طور كلي

برنامه‌هايي كه نرخ محاسبات نسبت به نرخ ورودي و خروجي در آنها بسيار بزرگ بوده و داراي چگالي

محاسباتي (Arithmetic Intensity) بالايي باشند به خوبي توسط پردازنده‌گرافيكي پردازش‌شده و

افزايش عملكرد محسوسي نسبت به پياده سازي‌ بر پايه پردازنده‌مركزي خواهند داشت.



اكثر برنامه‌هاي علمي از اين دسته هستند، به عنوان مثال برنامه حل دستگاه معادلات خطي،

برنامه‌اي است كه چند معادله ساده از ورودي دريافت كرده و بعد از اعمال يك سري محاسبات

پيچيده كه ممكن است ساعت‌ها زمان ببرد، چند جواب به خروجي ارسال مي‌كند. اين دسته

برنامه‌ها كه علاوه بر كم بودن نرخ ارتباطات آنها، محاسبات سنگيني داشته و اغلب محاسبات

آنها جنبه تكراري دارند، توسط پردازنده‌گرافيكي به خوبي پردازش مي‌شوند.

 

پردازنده‌گرافيكي از پردازنده‌مركزي سريع‌تر است

پاسخ اين سوال در يك كلمه خلاصه مي‌شود: «موازي‌سازي». مدل برنامه‌نويسي برنامه‌هايي

كه براي پردازنده‌مركزي نوشته مي‌شوند در اصل يك مدل سريال است به اين معني كه شبه كد‌هاي

تشكيل دهنده يك برنامه به ترتيب از بالا به پايين خوانده شده و پس از ترجمه، اجرا ‌شده و در آن به

ندرت از «موازي‌سازي» در پردازش داده‌ها استفاده مي‌شود.

معماري در نظر گرفته شده براي ‍پردازنده‌مركزي نيز بر مبناي اين مدل پايه‌ريزي شده است و قابليت‌هاي

چنداني براي اجراي چندين دستورالعمل مشابه را به صورت همزمان ندارد. در حالي كه مدل

برنامه‌نويسي برنامه‌هاي پردازنده‌گرافيكي كه Stream نام دارد، در اصل يك مدل موازي است

و قابليت بهره گيري از تكنيك‌هاي «موازي‌سازي» در آن گنجانده شده است، هرچند پردازنده‌مركزيهاي

جديد با قابليت‌هايي نظير HyperThreading، SSE ، 3D Now و بكارگيري‌ معماري‌هاي چند‌هسته‌اي

نويد «موازي‌سازي» بيشتر را مي‌دهند، اما نرخ موازي‌سازي آنها بسيار كمتر از يك پردازنده‌گرافيكي

با 320 واحد پردازشي است.

بر خلاف پردازنده‌گرافيكي، زيرسيستم حافظه در نظر گرفته شده براي پردازنده‌مركزيها براي كاربردهايي

كه نياز به دسترسي به حافظه با تاخير كم دارند بهينه شده است نه براي برنامه‌هايي كه به

پهناي باند حافظه وسيعي نياز دارند، با توجه به مدل برنامه نويسي سريال پردازنده‌مركزي، بخش‌هاي

يك برنامه بايد مرجع‌هاي حافظه را براي به جريان افتادن قسمت بعدي برنامه، به سرعت برگردانند كه

لازمه اين امر تاخير كم در دسترسي به حافظه است، به همين دليل در سلسله مراتب حافظه‌ي

پردازنده‌مركزي چندين لايه حافظه نهان گنجانده شده تا اين تاخير را به حداقل برساند.
در مقابل، در مدل برنامه‌نويسي Stream‌ كه برنامه‌هاي پردازنده‌گرافيكي در چهارچوب‌ آن نوشته

مي‌شوند، پهناي باند دسترسي به حافظه گسترده‌تر اهميت بيشتري نسبت به تاخير دسترسي

به حافظه دارد، چرا كه در اين مدل، برنامه‌هاي پردازنده‌گرافيكي به صورت موازي اجرا شده و وابستگي

چنداني ميان‌ آنها وجود ندارد. به همين دليل برنامه‌هايي كه نياز به پهناي‌باند حافظه‌ زيادي دارند،

با پردازنده‌گرافيكي‌ سريع‌ از پردازنده‌مركزي‌ اجرا مي‌شوند.



پردازنده‌مركزي‌ يك پردازنده كاملا عمومي است كه هر نوع عمليات محاسباتي و پردازشي را مي‌توان

با آن انجام داد اما پردازنده‌گرافيكي يك پردازنده كاملا اختصاصي است كه ويژه پردازش گرافيكي طراحي

شده، به همين دليل در مدل برنامه نويسي Stream دنيايي از محدوديت‌ها وجود دارد و در مقابل آن

دنيايي ديگري از ترفند‌ها ايجاد شده كه به برنامه نويس امكان اجراي يك برنامه غيرگرافيكي به كمك

پردازنده‌گرافيكي را مي‌دهد. اين محدوديت‌ها موجب شده اند تا GPGPU تنها در شاخه‌هاي خاصي از

علوم كاربرد پيدا كند كه بررسي تك تك اين عوامل خارج از حوصله اين مقاله است

ابزار‌هاي برنامه‌نويسي GPGPU‌

زبان برنامه‌نويسي ++C همچنان بر تمامي ابزار‌هاي برنامه نويسي گرافيكي و GPGPU حكم‌فرمايي

مي‌كند و كليه ابزار‌هاي برنامه‌نويسي اين حوزه از جمله مشتق‌هاي آن به شمار مي‌روند و به نوعي

گرامر و دستورات اصلي آن را با خود به همراه دارند. به طور كلي براي برنامه‌نويسي GPGPU سه روش

وجود دارد كه به ترتيب به آنها اشاره مي‌كنيم:

1-API‌ها و زبان‌هاي برنامه‌نويسي گرافيكي
اين روش كه در ابتدا از آن بسيار استفاده مي‌شد، كاملا مشابه برنامه نويسي گرافيكي است، به اين

معنا كه برنامه نويس با فرض آشنا بودن به يكي از API هاي گرافيكي مانند DirectX يا OpenGL و در

نظر گرفتن تمامي محدوديت‌هاي موجود در مدل برنامه نويسي Stream ، برنامه غيرگرافيكي را به

صورت گرافيكي شبيه‌سازي كرده و مراحل پياده سازي آن را دنبال مي‌كند. علاوه بر اين برنامه‌نويس

مي‌تواند در صورت آشنا بودن به زبان برنامه نويسي Cg كه توسط شركت NVIDIA‌ توسعه داده شده است،

برنامه غيرگرافيكي خود را در اين محيط توسعه دهد. لازمه اين روش آشنايي كامل با محيط برنامه‌نويسي

‌گرافيكي و محدوديت‌هاي برنامه‌نويسي GPGPU‌ مي‌باشد به همين دليل برنامه‌نويس بيشتر بايد بر روي نحوه

پياده‌سازي و مرتفع‌كردن محدوديت‌ها تمركز داشته باشد تا بر روي الگوريتم‌هاي برنامه خود.

2-زبان‌هاي برنامه‌نويسي GPGPU و كتابخانه‌ها
با توجه به پيچيدگي روش اول، پياده سازي برنامه‌هاي بزرگ توسط آن بسيار مشكل است به همين

دليل زبان‌هاي برنامه نويسي خاص GPGPU ابداع شده اند كه با در نظر گرفتن محدوديت‌هاي مدل

برنامه‌نويسي Stream به برنامه‌نويس امكان مي‌دهند تا تمركز بيشتري بر روي الگوريتم‌هاي برنامه

خود داشته باشد، همچنين اين زبان‌ها تعامل مستقيم برنامه‌نويس با API‌گرافيكي را از بين برده‌اند

و برنامه‌نويس نيازي به آشنايي با آنها جهت پياده‌سازي برنامه خود ندارد. تا كنون دو زبان برنامه

نويسي GPGPU معرفي شده كه اين دو زبان عبارتند از Brook و Sh.

زبان برنامه نويسي Brook توسط تيم دانشگاه استنفورد توسعه يافته، اين زبان از جمله كاربردي‌ترين

زبان‌هاي برنامه نويسي GPGPU‌ به شمار مي‌رود كه در نسخه بهينه شده برنامه Folding@Home براي

پردازنده‌گرافيكيها نيز از آن بهره گرفته شده است. زبان برنامه‌نويسي Sh نيز توسط تيم دانشگاه واترلو

توسعه يافته و تا كنون پروژه‌هاي زيادي با آن اجرا شده است. علاوه بر اين كتابخانه‌هاي متعددي وجود

دارند كه امكان برنامه نويسي GPGPU‌ را در پلتفورم .Net يا VC++ 6.0 فراهم كرده‌اند از جمله معروف‌ترين

اين كتابخانه‌ها، Accelerator نام دارد كه توسط مايكروسافت توسعه يافته است.

كتابخانه‌هاي اختصاصي پردازش‌تصوير متعددي نيز در اين معقوله عرضه شده‌اند كه از مهمترين

آنها مي توان به GPUCV و OpenVIDIA اشاره كرد. به كمك اين كتابخانه‌ها مي‌توان الگوريتم‌هاي

پردازش تصوير و بينايي‌ماشين را جهت پردازش توسط پردازنده‌گرافيكي توسعه داد.

-3پلتفورم‌هاي تجاري:
متداول‌ترين روش برنامه‌نويسي GPGPU تا كنون همان روش دوم است اما طي چند‌ماه اخير

پلتفورم‌هاي تجاري ارائه شده كه نويد برنامه‌نويسي ساده‌تر نه تنها براي پردازنده‌گرافيكي

بلكه به صورت كلي براي پردازنده‌هاي پرسرعت با قابليت موازي‌سازي نظير پردازنده Cell را

مي‌دهند. از اين دسته دو پلتفورم PeakStream و RapidMind را مي‌توان نام‌ برد، برخلاف

PeakStream كه نسخه تجاري آن عرضه شده است، RapidMind هنوز در مراحل آزمايشي

به سر مي‌برد.
كاربرد‌هاي غيرگرافيكي پردازنده‌گرافيكي
ساختار برنامه‌هاي غيرگرافيكي كه به خوبي توسط پردازنده‌گرافيكي

پردازش مي‌شوند به صورت مختصر در ابتداي مقاله توضيح داده شد

نمونه‌اي از اين كاربرد‌ها كه تاكنون صورت گرفته عبارتند از :

· برنامه‌هاي پيچيده ضرب ماتريسي و برداري
· روش‌هاي حل دستگاه معادلات خطي و دستگاه معادلات ديفرانسل
· برنامه‌هاي شبيه‌سازي ساختار پروتئين
· برنامه‌هاي مسيريابي شعاع نور ( Ray Tracing)
· برنامه‌هاي شبيه‌سازي فيزيكي مانند شبيه سازي جريان سيال يا تصادم
· برنامه‌هاي پيمايش و توليد گراف
· برنامه‌هاي پردازش صوت يا تصوير
· برنامه‌هاي بينايي ماشين
· برنامه‌هاي محاسبه تبديل فوريه سريع (FFT)

بهره‌گيري از قابليت‌هاي پردازنده‌گرافيكي در الگوريتم‌هاي بينايي ماشين و پردازش تصوير جهت

دست‌يابي به سه هدف كلي مطرح شده است، هدف اول نائل شدن به عملكرد Real-Time بدون

نياز به كاهش پيچيدگي الگوريتم است، هدف دوم كاهش باركاري پردازنده مركزي از عمليات پردازشي

الگوريتم‌هاي بينايي ماشين و اختصاص آن به ساير برنامه‌ها مي باشد و هدف سوم نيز افزايش سرعت

محاسبات برنامه‌هاي پردازش تصوير به كمك يك راه‌كار به صرفه اقتصادي است.

الگوريتم‌هاي بينايي ماشين به طور معكوس از سخت‌افزار گرافيكي استفاده مي‌كنند چرا كه پردازنده‌

گرافيكي در كاربردهاي متداول خود موظف به ترسيم تصوير سه بعدي بر مبناي داده‌هاي عددي و

آناليزهاي رياضي توصيف كننده آن تصوير مي‌باشد در حالي كه در كاربرد‌هاي بينايي ماشين،

تصوير يا بخشي از يك فريم به پردازنده گرافيكي داده مي‌شود تا از آن آناليزهاي عددي استخراج شود.

به همين خاطر الگوريتم‌هاي بينايي ماشين و پردازش تصوير نسبت به الگوريتم‌هاي گرافيك كامپيوتري

، به طور معكوس از سخت‌افزار گرافيكي استفاده مي‌كنند.
با توجه به پشتيباني پردازنده‌هاي گرافيكي جديد از استاندارد نمايش اعداد 32 بيت مميز شناور IEEE 754

، دقت لازم جهت پياده‌سازي الگوريتم‌هاي دقيق پردازش تصوير فراهم گشته است لذا از نظر دقت عملكرد

نمي‌توان تفاوتي ميان آن با پياده‌سازي‌هاي متداول الگوريتم‌هاي پردازش تصوير بر روي پردازنده‌مركزي مشاهده

كرد.
مشکلات متداول
عوامل متعددي وجود دارند كه هنگام پياده‌سازي يك الگوريتم پردازش‌تصوير بر روي پردازنده‌گرافيكي مانع

از نيل به اهداف ذكر شده مي‌شوند از جمله اين عوامل مي‌توان به پهناي باند محدود ميان حافظه اصلي

و كارت‌گرافيك كامپيوتر اشاره كرد.

در يك الگوريتم پردازش تصوير ابتدا تصوير يا بخشي از فريمي كه قرار است توسط پردازنده‌گرافيكي پردازش

شود، از حافظه اصلي كامپيوتر به حافظه كارت‌ گرافيك منتقل مي‌شود (Download) و پس از اجراي عمليات

پردازش، نتايج كار مي‌بايست از حافظه كارت‌گرافيك مجددا به حافظه اصلي بازگردد (Upload).

در معماري كامپيوتر‌هاي مدرن متاسفانه هنوز هيچ راه كاري براي استفاده از DMA در عمليات Upload

تدبير نشده است اما عمليات Download به كمك DMA كمي تسريع بخشيده مي‌شود.
با توجه به اين توضيحات امكان دارد كه در اين عمليات انتقال داده ميان حافظه سيستم و حافظه

كارت‌گرافيك آنقدر زمان سپري شود كه مزيت‌هاي پردازش سريع داده‌ها توسط پردازنده‌گرافيكي تباه سازد.

به همين خاطر پيشنهاد داده مي‌شود از فراخواني بخش‌هايي از فريم كه در الگوريتم پردازش تصوير به كار

گرفته نمي‌شوند خود داري شده تاحجم داده مبادله شده ميان حافظه اصلي وحافظه كارت‌گرافيك محدود گردد.

کتابخانه‌ OpenVIDIA و GPUCV


1-كتابخانهOpenVIDIA
OpenVIDIA نام‌ كتابخانه متن‌بازي است كه در دانشگاه تورنتو براي پياده‌سازي الگوريتم‌هاي پردازش

تصوير بر روي پردازنده‌گرافيكي نگاشته شده است. اين كتابخانه با استفاده از API گرافيكي OpenGL و

زبان Cg توسعه داده شده است و در سال 2005 برنده جايزه نرم‌افزار چند‌رسانه‌اي متن‌باز گشته.
OpenVIDIA واسط ساده‌اي را براي جهت توسعه برنامه‌هاي پردازش تصوير و بينايي ماشين ارائه ميدهد

كه در آن الگوريتم‌هاي متداول پردازش تصوير مانند فيلتر‌هاي يافتن لبه ، قابل استفاده مي‌باشد.
يكي ديگر از امكانات اين كتابخانه قابليت آن در پشتيباني از چندين كارت‌گرافيك مي‌باشد به اين ترتيب

مي‌توان آن را راه‌كار اقتصادي مناسبي جهت ايجاد يك ماشين پردازش تصوير قدرتمند بيان كرد .

با اين وجود، اين كتابخانه كاملا نتوانسته است توابع API گرافيكي را از ديد برنامه‌نويس مخفي سازد،

لذا برنامه نويس نياز دارد تا جهت مقدار دهي به توابع گرافيكي به كارگرفته شده و بافرهاي مورد نياز،

خود را اندكي درگير API گرافيكي كند.
-2كتابخانه GPUCV


اين كتابخانه رايگان كه در پروژه‌اي به نام Vision-پردازنده‌گرافيكي در دانشگاه ريمز فرانسه توسعه يافته

است، جهت پياده‌سازي عملگر‌هاي الگوريتم‌هاي بينايي‌ماشين بر روي پردازنده‌گرافيكي ايجاد شده و به

عنوان نسخه الحاقي كتابخانه معروف Intel OpenCV عمل مي‌كند.
جهت پياده‌ سازي يك الگوريتم بينايي‌ماشين GPUCV محيط برنامه‌نويسي مشابه OpenCV را در اختيار

برنامه‌نويسان قرار مي‌دهد تا به سادگي بتوانند با تغيير نام عملگر‌ها و عملوند‌هاي خود الگوريتم را در

حداقل زمان از بارپردازشي پردازنده‌مركزي به پردازنده‌گرافيكي منتقل كنند. بنابراين براي كاركردن با اين

كتابخانه، نيازي به فراگيري دستورات API گرافيكي و مراجع سايه‌زن‌هاي كارت گرافيك نيست و GPUCV‌

توانسته جزئيات گرافيكي برنامه‌نويسي پردازنده‌گرافيكي را از ديد برنامه‌نويسان پهنان سازد.
توابع عملياتي GPUCV همانند عملگرهاي OpenCV فراخواني شده و از ساختمان داده مشابهي بهره

مي‌برند به همين خاطر مي‌توان الگوريتم تركيبي را از عملگر‌هاي GPUCV و OpenCV توسعه داد كه

بسته به انتخاب برنامه‌نويس بخشي از عمليات توسط پردازنده‌مركزي و بخشي توسط پردازنده‌گرافيكي

پردازش مي‌شود.بر اساس نتايج آزمايش‌هاي صورت گرفته كارايي عملگرهاي GPUCV با عملگر‌هاي OpenCV

مقايسه شده است كه در جدول شماره 1 نشان داده شده است. همانطور كه مشاهده مي‌كنيد بدون

احتساب زمان Upload عملگر‌هاي GPUCV‌ حدود 5 برابر سريع‌تر از عملگر‌هاي OpenCV هستند كه اين

نسبت برتري با احتساب زمان Upload به حدود 2 برابر مي‌رسد.
سخن آخر

در آينده نه‌چندان دور GPGPU‌ يكي ديگر از تكنولوژي‌هاي موفقي خواهد بود كه در پس زمينه بازار چند

بيليون دلاري سرگرمي و بازي‌هاي كامپيوتري متولد شده است. اين تكنولوژي هنوز به بلوغ كامل

نرسيده و بيشتر در پروژه‌ها و تحقيقات آكادميك به كار گرفته‌ مي‌شود، اما پيش‌بيني فراگير شدن آن

دور از تصور نيست.

در آينده نزديك اگر كامپيوتر شما مجهز به يك كارت گرافيك قدرتمند نباشد نه تنها از بازي‌كردن بازي‌هاي

جذاب نسل آينده محروم خواهيد شد بلكه ممكن است نتوانيد يك فيلم با كيفيت يا حتي يك برنامه

علمي را اجرا كنيد. با فراگير شدن نسبي اين تكنولوژي، نه تنها ساختار نرم‌افزارها بلكه معماري

پردازنده‌مركزي ها نيز متحول خواهد شد، پس از ادغامAMD و ATI خبر‌هاي متعددي مبني بر ادغام

پردازنده‌مركزي و پردازنده‌گرافيكي و معماري يك‌پارچه‌اي به نام Fusion جهت استفاده از مزاياي GPGPU

منتشر شده است.

استقبال از اين تكنولوژي جديد توسط محافل علمي و آكادميك جهت توسعه علوم‌ آن كاملا آينده‌نگرانه

است، هم اكنون دانشگاه‌هاي معدودي در دنيا بر روي اين تكنولوژي سرمايه گذاري كرده‌اند و هم‌وطنان

ما در اكثر گروه‌هاي تحقيقاتي اين حوزه حضور دارند، با اين فرض مي‌توان گفت كه زمينه بسيار مساعدي

جهت توسعه علوم كامپيوتر و سهيم دانستن خود در تكنولوژي‌هاي نسل آينده كامپيوترها براي ما به

وجود آمده است




:: موضوعات مرتبط: واحد پردازش گرافیکی (به انگلیسی: Graphics processing unit) یا به اختصار GPU , ,
:: بازدید از این مطلب : 544
|
امتیاز مطلب : 0
|
تعداد امتیازدهندگان : 0
|
مجموع امتیاز : 0
تاریخ انتشار : یک شنبه 5 خرداد 1392 | نظرات ()
مطالب مرتبط با این پست
لیست
می توانید دیدگاه خود را بنویسید


نام
آدرس ایمیل
وب سایت/بلاگ
:) :( ;) :D
;)) :X :? :P
:* =(( :O };-
:B /:) =DD :S
-) :-(( :-| :-))
نظر خصوصی

 کد را وارد نمایید:

آپلود عکس دلخواه: